// 查找相关元素的前一个兄弟元素的函数
function prev(elem){
    do{
        elem = elem.previousSibling;
    }while (elem && elem.nodeType !=1){
        return elem;
    }
}

// 查找相关元素的后一个兄弟元素的函数
function next(elem){
    do{
        elem = elem.nextSibling;
    }while (elem && elem.nodeType !=1){
        return elem;
    }
}

// 查找元素的第一个子元素的函数
function first(elem){
    elem = elem.firstChild;
    return elem && elem.nodeType !=1 ? next(elem) : elem;
}

// 查找元素的最后一个子元素的函数
function last(elem){
    elem = elem.lastChild;
    return elem && elem.nodeType !=1 ? prev(elem) : elem;
}

// 查找元素父元素的函数
function parent(elem,num) {
    num =num||1;
    for (var i=0;i<num;i++){
        if(elem!=null) elem=elem.parentNode;
        return elem;
    }
}

// 封装函数
function id(name) {
    return document.getElementById(name);
}
function tag(name,elem) {
    return (elem || document).getElementsByTagName(name);
}

// 获取和设置元素特性的值
function attr(elem,name,value){
    // 确保提供的name是正确的
    if(!name || name.constructor != String ) return '';
    // 检查name是否处在怪异命名的情形中
    name = {'for':'htmlFor','class':'className'}[name] || name;
    // 如果用户传入了value参数的话
    if (typeof value != 'undefined') {
        // 首先使用快捷方式
        elem[name] = value;
        // 可以的话，使用setAttribute
        if (elem.setAttribute)
            elem.setAttribute(name,value);
    }
    // 返回特性的值
    return elem[name] || elem.getAttribute(name) || '';
}

// 设置<h1>元素的class
attr(tag("h1")[0],"class","header");
// 设置各个<input>元素的值
var input = tag("input");
for (var i=0; i<input.length; i++){
    attr(input[i],"value","");
}
// 为name的值是'invalid'的<input>元素增加边框
var input = tag("input");
for (var i=0; i<input.length; i++){
    if ( attr(input[i],"name") == 'invalid' ) {
        input[i].style.border = "2px solid red";
    }
}